package com.ahora.org.controller.MBean;

import java.util.ArrayList;
import java.util.Date;
import java.util.List;
import java.util.Map;

import javax.ejb.EJB;
import javax.faces.application.FacesMessage;
import javax.faces.bean.ManagedBean;
import javax.faces.bean.SessionScoped;
import javax.faces.context.FacesContext;
import javax.faces.event.ActionEvent;

import com.ahora.org.ejb.dao.util.Util;
import com.ahora.org.ejb.dao.util.Validaciones;
import com.ahora.org.ejb.facade.interfaces.DocumentoInternoFacade;
import com.ahora.org.ejb.jpa.beans.TipoDocumentoInternoDTO;
import com.ahora.org.ejb.jpa.entities.TipoDocumentosInternos;
import com.ahora.org.ejb.jpa.entities.Usuario;

@SessionScoped
@ManagedBean(name="manDocumentoBM")
public class MantenimientoDocumentos {
	@EJB private DocumentoInternoFacade serDocInt;
	private TipoDocumentosInternos objTipoDoc;
	private List<TipoDocumentoInternoDTO> lstTipoDocumentos;
	public String accion;
	//paginacion y total de filas
	private int cantTipoDocumentos;
	private int numTipoDocumentos;
	
	public int getCantTipoDocumentos() {
		return cantTipoDocumentos;
	}

	public void setCantTipoDocumentos(int cantTipoDocumentos) {
		this.cantTipoDocumentos = cantTipoDocumentos;
	}

	public int getNumTipoDocumentos() {
		return numTipoDocumentos;
	}

	public void setNumTipoDocumentos(int numTipoDocumentos) {
		this.numTipoDocumentos = numTipoDocumentos;
	}

	public String getAccion() {
		return accion;
	}

	public void setAccion(String accion) {
		this.accion = accion;
	}

	public TipoDocumentosInternos getObjTipoDoc() {
		return objTipoDoc;
	}

	public void setObjTipoDoc(TipoDocumentosInternos objTipoDoc) {
		this.objTipoDoc = objTipoDoc;
	}

	public List<TipoDocumentoInternoDTO> getLstTipoDocumentos() {
		lstTipoDocumentos = serDocInt.listarDocumentosInternosMantenimiento();
		cantTipoDocumentos=lstTipoDocumentos.size();
		numTipoDocumentos=Validaciones.retornarValor_Paginado(lstTipoDocumentos.size());
		return lstTipoDocumentos;
	}

	public void setLstTipoDocumentos(List<TipoDocumentoInternoDTO> lstTipoDocumentos) {
		this.lstTipoDocumentos = lstTipoDocumentos;
	}

	public MantenimientoDocumentos() {
		System.out.println("ENTRE A MI CONSTRUCTOR DE 'MantenimientoUsuarios' ******************************************");
		objTipoDoc = new TipoDocumentosInternos();
		lstTipoDocumentos = new ArrayList<TipoDocumentoInternoDTO>();
		//listarDocumentosMantenimiento();
	}

	/******************************************************************************************/

	public String updateDocumentoTrue() {
		String valor = "";
		try {
			objTipoDoc.setTbUsuario(Util.getUserLog());
			valor = serDocInt.updateDocumento(objTipoDoc, Util.getUserLog());
		} catch (Exception e) {
			e.printStackTrace();
		} finally {
			limpiarLista();
		}
		return valor;

	}

	public String registrarUsuarioX() {
		String valor = "";
		try {
			objTipoDoc.setFechaRegistro(Validaciones.dateToTimeStamp(new Date()));
			objTipoDoc.setIdEstado(1);
			Usuario objUsuarioRegistrador = Util.getUserLog();
			objTipoDoc.setTbUsuario(objUsuarioRegistrador);
			valor = serDocInt.insertarUsuario(objTipoDoc, Util.getUserLog());
		} catch (Exception e) {
			e.printStackTrace();
		} finally {
			limpiarLista();
		}
		return valor;
	}

	public void limpiarLista() {
		objTipoDoc = new TipoDocumentosInternos();
	}

	/*public String listarDocumentosMantenimiento() {
		lstTipoDocumentos = new ArrayList<TipoDocumentoInternoDTO>();
		try {
			lstTipoDocumentos = serDocInt.listarDocumentosInternosMantenimiento();
			cantTipoDocumentos=lstTipoDocumentos.size();
			numTipoDocumentos=Validaciones.retornarValor_Paginado(lstTipoDocumentos.size());
		} catch (Exception e) {
			e.printStackTrace();
		}
		return "manDocumentos";
	}
*/
	public String buscarDocumentoDetalle() {
		accion = "update";
		Map<String, String> paramMap = FacesContext.getCurrentInstance()
				.getExternalContext().getRequestParameterMap();
		String strCodigoParametro = paramMap.get("codDocumento");
		objTipoDoc = new TipoDocumentosInternos();
		try {
			objTipoDoc = serDocInt.buscarDocumentoUnique(Integer.parseInt(strCodigoParametro));
		} catch (Exception e) {
			e.printStackTrace();
		}
		return "registDocumento";
	}

	public String registrarDocumento() {
		accion = "register";
		limpiarLista();
		return "registDocumento";
	}

	public String manDocumentos() {
		//listarDocumentosMantenimiento();
		this.getLstTipoDocumentos();
		return "manDocumentos";
	}

	public String DeleteTipoDocumento() {
		String valorDelete = "";
		FacesMessage msg = null;

		valorDelete = serDocInt.deleteDocumento(Integer.parseInt(valorEliminar), Util.getUserLog());
		msg = new FacesMessage(FacesMessage.SEVERITY_INFO, "INFO", valorDelete);
		FacesContext.getCurrentInstance().addMessage(null, msg);
		System.out.println("VALOR DEL DELETE *******" + valorDelete);
		//listarDocumentosMantenimiento();
		this.getLstTipoDocumentos();
		return "manDocumentos";
	}

	public String registrarEditarDocumento() {
		String d = "";
		try {
			if (accion.equals("update")) {
				d = updateDocumentoTrue();
				Util.mensajeCompletoInfo("", d);
			} else {
				d = registrarUsuarioX();
				Util.mensajeCompletoInfo("", d);
			}
			this.getLstTipoDocumentos();
		} catch (Exception e) {
			e.printStackTrace();
		}
		return "manDocumentos";
	}

	public String valorEliminar;

	public String getValorEliminar() {
		return valorEliminar;
	}

	public void setValorEliminar(String valorEliminar) {
		this.valorEliminar = valorEliminar;
	}

	public void actionListener(ActionEvent e) {
		Map<String, String> paramMap = FacesContext.getCurrentInstance()
				.getExternalContext().getRequestParameterMap();
		String strCodigoParametro = paramMap.get("codDocumentoE");
		valorEliminar = strCodigoParametro;
		System.out
				.println("@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ "
						+ valorEliminar);
	}
	
	public String backToManDoc(){
		return "manDocumentos";
	}
	
	public String backToInicio(){
		return "pageIndexAdministrador";
	}
}
